終於來到鐵人賽的最後一天,最後就來介紹要如何貢獻 pybaseball 跟我這次鐵人賽的心得,為這次的鐵人賽畫下句點。
想要貢獻開源的第一步,通常都是去看他們的 contributing.md 檔,裡面會整理如何把他們的程式碼拉到自己的本機端,還有需要執行哪些 Scripts 來建好他們的開發環境。有時候也會提供一些他們開 Issue 跟 PR 的規則,如果想要貢獻的話一定要詳讀這份文件。
在開發前要記得先 Fork 一份到自己的 Repo,並在自己的本機端用 git remote add
把他們 Repo 的 git 加進去,這樣是防止其他開發者汙染到 pybaseball 的 origin。之後開發完就是 push 到自己 Repo 的 branch 再開 PR 回到 pybaseball 的 origin。
pybaseball 的程式開發規則我覺得相對算簡單,如果是開發新的 functions,只要遵守他們規定的程式碼格式 (他們目前使用 python 的 PEP8),並且在宣告參數與回傳值的時候也要記得宣告他們各自的 Type (型態),就能開 PR 出來。不過通常他們的 functions 也都有註解說明 functions 的用途,所以假設是開發新的 function 也要記得附上去。
最後是記得開發完要執行 pytest
,如果是修改既有 function 要注意他們的 tests 有沒有過,新的 functions 也可能要自己寫一份,不過都可以參考前面的人寫的。
Issue 沒特別說有甚麼規則,但我個人建議如果是 Bug 回報要附上自己執行的程式碼,還有使用的環境,這樣其他人才能更快了解狀況跟去想辦法重現,最好也附上遇到的錯誤碼。
這邊附上我開的 Issue:
Fangraphs add league="mnl" data not working · Issue #384 · jldbc/pybaseball (github.com)
PR 的話,會需要完整敘述開的 PR 的改動,如果有相關的 Issue 要記得附上,另外如果是新的 function 也要新增官方說明文件進 docs。不過也不用擔心有漏掉什麼,通常 maintainer 會 review PR 並提醒你少了哪些。
附上我開的 PR 可以參考一下:
Statcast cache incomplete issue by ss77995ss · Pull Request #379 · jldbc/pybaseball (github.com)
通常開源會在 Issue 放上 good first issue
label 讓其他有興趣的開發者去領來貢獻,不過 pybaseball 已經很久沒標 labels 了,所以有想要貢獻甚麼可以直接撿有興趣的 Issues 開 PR 也沒關係,或是加入他們官方的 Discord 裡去討論。裡面會有其他開發者在裡面討論,如果要直接找 Maintainers 也可以直接在裡面 tag 他們問問題,但他們有時候也都各自有其他事要忙,所以不會馬上回應。
當然如果其他開發者如果有問題需要解決,幫助他們找到問題點或提供他們也是貢獻的一種方式,真的很歡迎大家一起來交流!
經過了三十天的努力,終於完成這項挑戰,真的滿開心的,我很慶幸自己有嘗試這個挑戰。因為我之前都沒寫過技術文章,透過這次挑戰才知道平常能在臉書社團或自己的部落格分享的大神們真的都很厲害,要完成一篇文章需要花的時間與心力在我挑戰前真的是想不到需要這麼多,以後我想我有機會還是會寫點運動相關的東西,但暫時不會想每天寫一篇了。
雖然現在可能還不明顯,但近幾年台灣棒球有一直在緩慢跟上世界的腳步導入新技術、新數據,也希望陸續新人一起加入研究的行列,讓更多人參與開發出新的環境。另外這邊也再推薦一些棒球相關的開源專案,有興趣的也可以去裡面挖寶:
棒球的部分大概到這邊,Github 裡面其實也有很多其他運動像是籃球的開源專案,這邊就不多做介紹,大家可以去翻翻看。
最後特別感謝嘉欣幫我前面幾篇潤稿,後面我們兩個都有其他事要忙所以變成只有我自己潤過,所以後面可能會有更多錯字,還請大家見諒。也謝謝他這三十天的鼓勵與支持,有機會明年可能會再找個主題挑戰看看,今天也謝謝大家耐心地看完。